ارتباط به منابع داده در ADO.NET ( بخش سوم )
دهلران پی سی
سایت جامع علمی ,آموزشی,فرهنگی و تفریحی

در بخش اول اين مقاله به  تشريح انواع  Data Provider  و در بخش دوم  با  نحوه ايجاد يک Connection آشنا شديم . در اين بخش به  بررسی نحوه مديريت يک Connection خواهيم پرداخت .

پس از تعريف خصلت ConnectionString مربوط به  شی Connection ، می توان  با استفاده از متدهای Close و Open ، مديريت وضعيت Connection جاری را انجام داد . در ادامه با نحوه استفاده از متدهای فوق و  پاسخگوئی به رويدادهای Connection آشنا خواهيم شد.

فعال نمودن و غير فعا ل نمودن يک  Connection
بمنظور فعال نمودن و يا غير فعال نمودن يک Connection  می توان بصورت تلويحی عمليات فوق را با فراخوانی متدهای يک شی که از Connection استفاده می نمايند انجام و يا با صراحت و بکمک متدهای Open و يا Close اقدام به فعال نمودن و يا غير فعال نمودن Connection نمود . متدهای Open و Close  دو متد اوليه برای هر Connection می باشند .

  • متد Open  با استفاده از اطلاعات موجود در خصلت ConnectionString  ، با يک منبع داده ارتباط و يک ارتباط فعال شده را ايجاد خواهد کرد .
  • متد Close باعث غير فعال شدن Connection  می گردد .

لازم است به اين نکته اشاره گردد که بستن ( غير فعال نمودن ) يک Connection  امری لازم و ضروری است ، چراکه اکثر منابع داده صرفا" تعداد محدودی از ارتباطات فعال  را حمايـت نموده و در ضمن ارتباطات فعال  ، منابع با ارزش سيستم را اشغال و حجم عملياتی بر روی سيستم را افزايش خواهند داد .

فعال نمودن و غير فعال نمودن صريح يک  Connection
استفاده صريح از متدهای Open و Close  بمنظور فعال نمودن و يا غير فعال نمودن Connection توصيه و دارای مزايای زير است :

  • کد نوشته شده دارای خوانائی بمراتب بيشتری  خواهد بود .
  • اشکال زدائی برنامه ها با سرعت مطلوبی انجام خواهد شد .
  • موثرتر می باشد.

پس از استفاده Connection ، لازم است که ارتباط ايجاد شده غير فعال گردد . بدين منظور، می توان از متدهای Close و يا Dispose مربوط به شی Connection استفاده نمود. متد Close ، تراکنش های بلاتکليف را تعيين تکليف نموده و در ادامه ارتباط را غير فعال می نمايد . در موارديکه Pooling فعال شده باشد ، متد فوق  باعث آزادسازی ارتباط ايجاد شده از Connection pool می گردد . فراخوانی متد Close توسط  يک برنامه می تواند چندين مرتبه صورت پذيرد.

فعال نمودن و غير فعال نمودن تلويحی يک Connection
در صورت استفاده از DataAdapters ، ضرورتی به فعال نمودن و يا غير فعال نمودن يک Connection  وجود نخواهد داشت . زمانيکه يکی از متدهای  مربوط به اشياء  فوق ، فراخوانده  می گردد ( مثلا" متد Update و يا Fill مربوط به شی SqlDataAdapter ) ،  متد مورد نظر بررسی لازم در خصوص  فعال بودن ارتباط را انجام و در صورتيکه ارتباط فعال نشده باشد ، SqlDataAdapter ارتباط را فعال و پس از انجام عمليات مورد نظر ، ارتباط را غير فعال خواهد نمود .

مثال : در صورتيکه يک DataSet  داده خود را از چندين جدول متفاوت که در بانک اطلاعاتی مشابه قرار دارند ، دريافت می نمايد ،صرفا" يک Connection وجود داشته و دارای چندين DataAdapters  خواهيم بود (هر DataAdapters مرتبط با يک جدول ) . در صورتيکه Connection بصورت تلويحی ( عدم استفاده صريح از متدهای Open و Close ) فعال و يا غير فعال گردد ، در زمان  پر نمودن اطلاعات در Dataset ، ارتباط با منبع داده  چندين مرتبه فعال و يا غير فعال خواهد شد . در چنين مواردی مناسب است که در ابتدا Connection با صراحت فعال و پس از فراخوانی متدهای Filling مربوط به چندين DataAdapters  ، ارتباط ايجاد شده با منبع داده را با بکارگيری متد Close و باصراحت غير فعال نمود .

استفاده از متد Dispose
زمانيکه يک Connection  غيرفعال  می گردد ، جريان اطلاعات به و يا از منبع داده غير فعال می گردد. در چنين حالتی ، منابع غيرمديريت يافته استفاده شده توسط شی Connection ، آزاد نخواهند گرديد.در صورتيکه Connection pooling فعال شده باشد ، عمليات آزاد سازی Connection از Pool نيز انجام خواهد شد. اشياء SqlConnection و OleDbConnection دارای يک متد Dispose بوده که از آن بمنظور آزادسازی منابع غيرمديريت يافته استفاده می گردد .  با فراخوانی متد Dispose ، عمليات حذف Connection  از Connection pool نيز انجام خواهد شد .

مثال : استفاده از متد Dispose
در مثال زير، يک شی SqlConnection  ايجاد و در ادامه با استفاده از متد Open  فعال و سپس بمنظور غيرفعال نمودن Connection و آزاد سازی منابع  استفاده شده توسط Connection  از متد Dispose  استفاده و در نهايت شی مورد نظر به Nothing مقداردهی شده است .

نحوه استفاده از متد Dispose

تعريف و نمونه سازی يک شی جديد SqlConnection  '

Dim cnNorthwind AS New  System.Data.SqlClient.SqlConnection ()

مقدار دهی مناسب خصلت ConnectionString  '

cnNorthwind.ConnectionString = "Data Source="(Local); " & _

"Initial Catalog = Northwind;" & _

"Integrated Security=SSPI;"

فعال نمودن Connection '

cnNorthwind.open()

انجام عمليات دلخواه  و مرتبط با بانک اطلاعاتی   '
 
بستن Connection  که باعث آزاد سازی آن از Connection Pool  '
بر روی سرويس دهنده می گردد .'

cnNorthwind.Close()

Dispose نمودن ارتباط که باعث حذف connection از connection pool بر روی ' سرويس دهنده می گردد ، ذخيره سازی  منابع سرويس دهنده  '

cnNortwind.Dispose()

 آزاد سازی حافظه اشغال شده توسط شی SqlConnection '

cnNorthwind = Nothing  

برخورد با رويدادهای Connection
رويداد StateChange زمانی که وضعيت Connection تغيير نمايد ، محقق می گردد( وضعيت Connection از فعال به غير فعال و يا از غير فعال به فعال تبديل گردد) .بمنظور برخورد مناسب با هر يک از رويدادها ، از يک Event handler  استفاده می گردد. هر رويداد دارای Event handler  مختص خود می باشد.  Event handler مربوط به  رويداد StateChange ، متدی است که  دارای  آرگومانی از نوع StateChangeEventArgs  می باشد . آرگومان فوق،  شامل داده مرتبط با رويداد است .

رويداد StateChange
نوع NET data provider . ، که از آن استفاده می گردد ، آرگومان های خاص مربوط به رويداد  StateChange  را مشخص می نمايد :

  • رويداد SqlConnection.StateChange برای يک شی SqlConnection
  • رويداد OleDbConnection.StateChange برای يک شی OleDbConnection

لازم است بدين نکته اشاره گردد که  تمامی رويدادها در دات نت  دارای دو پارامتر زير  می باشند :

  • ارسال کننده ( از نوع شی )
  • e از نوع XxxEventArgs 

برای رويداد StateChange ، پارامتر e از نوع StateChangeEventArgs  می باشد.
event handler مربوط به دو رويداد فوق ،  نوع مشابهی از آرگومان ها را دريافت می نمايد : StateChangeEventArgs که شامل داده مرتبط با اين رويداد است . جدول زير خصلت های مربوط به کلاس StateChangeEventArgs را نشان می دهد :

 شرح

خصلت

خصلت فوق ، وضعيت جديد Connection را مشخص می نمايد. زمانيکه رويداد محقق گردد، شی Connection  همواره در يک وضعيت جديد خواهد بود  . 

CurrentSatate

وضعيت اوليه Connection را برمی گرداند .

OriginalSate

نمونه ای از يک Event Handler مربوط به StateChange 
مثال زير  نحوه ايجاد  StateChangeEventHandler را  با VB.NET ، نشان می دهد :

نحوه استفاده ازيک Event Handler  با استفاده از VB.NET

Private Sub cnNorthwind_State ( ByVal Sender As Object , ByVal e As                  System.Data.StateChangeEventArgs) Handles cnNorthwind.StateChange

نمايش وضعيت اوليه و جاری State  در يک messagebox  '
 زمانی که وضعيت Connection تغيير می نمايد '

MessageBox.Show("CurrentState:   "& e.Currentstate.ToString() & vbCrLF & _       "OriginalState :   " & e.OriginalState.ToString() , _
"cn.Northwind.StateChange" , _ 
  MessageBoxButtons.OK,_
  MessageBoxIcon.Information)
End Sub

در بخش چهارم اين مقاله  به بررسی  Connection Exceptions  ، خواهيم پرداخت .


نظرات شما عزیزان:

نام :
آدرس ایمیل:
وب سایت/بلاگ :
متن پیام:
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

 

 

 

عکس شما

آپلود عکس دلخواه:








ارسال توسط هادی احمدی

آرشیو مطالب
پيوند هاي روزانه
امکانات جانبی

آمار وب سایت:  

بازدید امروز : 168
بازدید دیروز : 4
بازدید هفته : 440
بازدید ماه : 752
بازدید کل : 162695
تعداد مطالب : 736
تعداد نظرات : 23
تعداد آنلاین : 1

Google

در اين وبلاگ
در كل اينترنت
 <-PostTitle-> <-PostContent-> 1 <-PostLink->